const { app, BrowserWindow, ipcMain, dialog } = require('electron');
const path = require('path');
const fs = require('fs');

// 保持对窗口对象的全局引用，防止被垃圾回收
let mainWindow;

function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: false,
      contextIsolation: true
    }
  });

  // 加载应用的 index.html
  mainWindow.loadFile('index.html');

  // 打开开发工具（可选）
  // mainWindow.webContents.openDevTools();

  // 窗口关闭时触发
  mainWindow.on('closed', () => {
    // 取消引用窗口对象，如果应用支持多窗口，可以将窗口存储在数组中
    mainWindow = null;
  });
}

// 当Electron完成初始化并准备创建浏览器窗口时触发
app.on('ready', createWindow);

// 当所有窗口关闭时退出应用
app.on('window-all-closed', () => {
  // 在macOS上，除非用户用Cmd+Q明确退出，否则应用及菜单栏通常会保持活动状态
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

app.on('activate', () => {
  // 在macOS上，点击dock图标重新创建窗口
  if (mainWindow === null) {
    createWindow();
  }
});

// 监听渲染进程的转换请求
ipcMain.handle('convert-docx', async (event, filePath, quality) => {
  try {
    mainWindow.webContents.send('conversion-status', '开始转换...');
    // 动态导入docx转换逻辑
    const { convertDocxToHtml } = require('./docx2html-core');
    const result = await convertDocxToHtml(filePath, { quality: quality });
    mainWindow.webContents.send('conversion-status', '转换完成');
    return { success: true, ...result };
  } catch (error) {
    console.error('转换失败:', error);
    mainWindow.webContents.send('conversion-status', '转换失败');
    return { success: false, error: error.message };
  }
});

// 监听文件保存请求
ipcMain.handle('save-file', async (event, content, defaultPath) => {
  try {
    const { canceled, filePath } = await dialog.showSaveDialog(mainWindow, {
      defaultPath: defaultPath,
      filters: [
        { name: 'HTML Files', extensions: ['html'] },
        { name: 'All Files', extensions: ['*'] }
      ]
    });
    
    if (!canceled && filePath) {
      fs.writeFileSync(filePath, content);
      return filePath;
    }
    return null;
  } catch (error) {
    console.error('保存文件失败:', error);
    throw error;
  }
});

// 监听选择文件请求
ipcMain.handle('select-file', async (event) => {
  try {
    const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, {
      properties: ['openFile'],
      filters: [
        { name: 'DOCX Files', extensions: ['docx'] },
        { name: 'All Files', extensions: ['*'] }
      ]
    });
    
    if (!canceled && filePaths.length > 0) {
      return filePaths[0];
    }
    return null;
  } catch (error) {
    console.error('选择文件失败:', error);
    throw error;
  }
});